//package NO8_Heap;
//
//import java.io.IOException;
//import java.net.URI;
//import java.net.http.HttpClient;
//import java.net.http.HttpRequest;
//import java.net.http.HttpResponse;
//import java.util.ArrayList;
//
//// 计算1到100000000的和，统计程序运行时间
//public class TestSpeed {
//    public void main(String[] args) {
//        long start = System.nanoTime();
//        long sum = 0;
//        for (int i = 1; i <= 100_000_000; i++) {
//            sum += i;
//        }
//        System.out.println((System.nanoTime() - start) / 1e6 + " ms");
//
//        // JDK11
//        // var 关键字
//        var list = new ArrayList<>();
//
//        // HttpClient
//        HttpResponse<String> response;
//        try {
//            try (HttpClient client = HttpClient.newHttpClient()) {
//                HttpRequest request = HttpRequest.newBuilder()
//                        .uri(URI.create("https://example.com"))
//                        .build();
//                response = client.send(request, HttpResponse.BodyHandlers.ofString());
//            }
//        } catch (IOException | InterruptedException e) {
//            throw new RuntimeException(e);
//        }
//        System.out.println(response.body());
//
//        // String 方法
//        // isEmpty() 和 isBlank()
//        String s = args[0];
//        System.out.println(s.isEmpty());
//        System.out.println(s.isBlank());
//        System.out.println(s.strip());
//
//        // JDK17
//        // Records
//        Person person = new Person("张三", 18, 180);
//        System.out.println(person);
//
//        // 密封类
//        Shape circle = new Circle(1.00);
//        Shape rectangle = new Rectangle(1.0, 1.0);
//        System.out.println(circle.area());
//        System.out.println(rectangle.area());
//
//        // 模式匹配
//        String[] days = {"TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"};
//        for (String day : days){
//            int result = switch (day) {
//                case "MONDAY", "FRIDAY", "SUNDAY" -> 6;
//                case "TUESDAY" -> 7;
//                default -> 0;
//            };
//            System.out.println(result);
//        }
//
//        // JDK21
//        // 虚拟线程
//        Thread.startVirtualThread(() -> {
//            System.out.println("Running in a virtual thread");
//        });
//
//        // 模式匹配
//        Object obj = 1;
//        switch (obj) {
//            case Integer i -> System.out.println("Integer: " + i);
//            case String str -> System.out.println("String: " + str);
//            default -> throw new IllegalStateException("Unexpected value: " + obj);
//        }
//    }
//
//    // 记录类
//    public record Person(String name, int age, int height) {
//        // 紧凑构造函数
//        // 你可以在记录体内定义一个紧凑构造函数，用于对传入的参数进行验证或规范化。它没有参数列表，因为参数列表隐含在记录头中。
//        public Person {
//            if (age < 0 || height < 0) {
//                throw new IllegalArgumentException("年龄或身高不能小于0");
//            }
//        }
//
//        public String toString() {
//            return "Person{" +
//                    "name='" + name + '\'' +
//                    ", age=" + age +
//                    ", height=" + height +
//                    '}';
//        }
//    }
//
//    // 密封类，指定只有哪几个类可以继承
//    // 它的核心目的是：通过限制子类集，来建模清晰的领域模型，并启用详尽的模式匹配。
//    // 1. 声明一个密封类 Shape，只允许 Circle 和 Rectangle 继承它
//    public abstract sealed class Shape permits Circle, Rectangle {
//        // Shape 的通用属性和方法
//        public abstract double area();
//    }
//
//    // 2. 子类必须是 final、sealed 或 non-sealed 之一
//    // a) final 子类：不能再被继承
//    public final class Circle extends Shape {
//        private final double radius;
//        public Circle(double radius) { this.radius = radius; }
//        @Override
//        public double area() { return Math.PI * radius * radius; }
//    }
//
//    // b) sealed 子类：它本身也是一个密封类，可以继续限制自己的子类
//    public sealed class Rectangle extends Shape permits Square {
//        private final double length, width;
//        public Rectangle(double length, double width) {
//            this.length = length;
//            this.width = width;
//        }
//        @Override
//        public double area() { return length * width; }
//    }
//
//    // Rectangle 允许 Square 继承它
//    public final class Square extends Rectangle {
//        public Square(double side) {
//            super(side, side); // 长和宽相等
//        }
//    }
//}